約 4,400,090 件
https://w.atwiki.jp/pjkyt/pages/19.html
何これ? Android端末用の日本語手書き入力です.7月17日に野良アプリを卒業してAndroid Marketで公開しました.少しバージョンが古いですがデモ・ビデオをごらんください. ソフト・キーボードはブラインド・タッチができないので,ちょっと打ち込んでは確認と修正を繰り返すことになります.このだるさはなんとかならんもんか,と作りました.慣れると快適に入力できます.漢字変換はオムロン社がソースを公開してくれているOpenWnnです.ありがたや. ご意見,ご感想は下のコメント・フォーム,もしくはこちらまで 最新情報 26.Aug.2010 最新版をアップロードしました.地道な認識精度改善です.コメントでご指摘いただいたスクリーン・サイズの対応もやろうと思っていたのですが,ちょっと手が回らなかったです.別に難しいことじゃないんですが,あれこれでございまして. さて,もう見た目にちゃんとしたカタカナならほぼ確実に認識できるレベルに来ていると思います.なので,認識率を上げようと思えばそれは簡単で,なぞった軌跡を表示するようにすればよいのです.ただ,それだと手元を見るようになっちゃって目標からそれてしまいます.あくまで「入力したつもりのカタカナを認識できる」をめざし改善を続けます.そのためには今の方式の限界が見えてきたので別のやり方を模索しています. あと,データが足りないのでログをとらせてくれるテスターを探さないといけないです.今はKとYの筆跡のみをよりどころに作りこんでいるので.ちなみにYはギッチョでしてその筆跡を見るに付けつくづくカタカナは右利きに最適化された文字だと感じ入る次第です. 使い方 インストールしたら設定の「地域/言語 文字入力」でKatakanaIMEを有効にしてください.適当なテキスト・ボックスで長押しすると入力方法の選択メニューが出ます.KatakanaIMEを選んでください.キーボードの代わりに黒い入力画面がでるのでそこでなぞってください.入力方法は以下の通りです.だいたいビデオの中で説明してあります. 文字・記号入力 文字入力はカタカナを書き順通りになぞってください 濁音,半濁音はそのままなぞればいけます 小文字は入力画面右下のマスでなぞると出ます 句点,句読点は小文字領域で「,」や「。」を書くと出ます 記号,絵文字は画面右下の「記」を押すと候補リストが出ます 削除,改行,空白,変換,決定,カーソル移動 Back spaceは右下から左上へ直線をなぞると発行されます(削除) ←動画のバージョンと挙動が違います! Enterは「∨」を右から下,上へなぞると発行されます(改行,決定) Spaceは「∧」を右から上,下へなぞると発行されます(空白,変換) ←動画のバージョンと挙動が違います! 左右は画面両端にある三角形をタップするとそれぞれ発行されます(カーソルの移動) 入力モードの切り替え 手書きからソフトキーボードへ移るには画面左下のマスをタップしてください ソフトキーボードから手書きへ移るには画面左下のボタンを長押しして「手」を選んでください 右下「?」をタップするとヘルプが表示されます なぜカタカナ? カタカナは手書き入力をする上でいろいろと有利です ストローク数が最高でも6本と少ないため高速に入力できる ひらがなと比べ,直線的なため認識が楽 一音につき2文字以上を正確に打ち込む必要のあるローマ字のように誤認識率が乗算されない Graffitiのようにルールを覚える必要がない 今後の予定 地道に入力精度を上げる スクリーン・サイズのサポートをちゃんとやる 新しい認識方式を模索する てす -- (K) 2010-07-12 20 15 00 カタカナを入力に使うのは上手い着眼点だと思います! ただ動画はXperiaでしょうか?HT-03Aだと入力窓サイズが 妙に大きくなって、区分けもおかしい様です。 -- (soru) 2010-07-22 00 20 56 コメントありがとうございます!動画はXperiaです マルチ・スクリーン・レゾルーションの対応が甘かったようです ちょっと今すぐは取り掛かれない状況なのですが, なるべく早く対応します -- (K) 2010-07-23 01 28 04 テスト 今後に期待してます 英数字との連携とか よくなるといいですね。 英数字も手書き入力とか。 個人的にはSimeji連携とかもいずれ考えて欲しいです -- (FUM) 2010-07-24 20 17 29 続けてのコメント失礼します。 ヲの書き順は精度の都合ですか? -- (FUM) 2010-07-25 13 22 13 コメントありがとうございます そうですね,英数字との連携はなんとかしたいところです ヲの書き順,ご指摘のとおり精度の都合でさぼっていました 正しく書いている人は少ないだろうと勝手な見込みをしていたのですが 説明で「書き順に従って」とする以上はサポートするべきですね 対策版をアップロードしました 現状では「テ」の認識精度を優先しているため 「ヲ」はかなり丁寧に書かないと出ないかもです -- (K) 2010-07-25 15 45 59 お疲れ様です。 片手で書くためか書き方に癖があるのか 一度誤認識にはまると -- (FUM) 2010-08-27 21 10 42 コメントありがとうございます メッセージが途中で切れてしまったようですが 誤認識が連続する現象は私も確認しております どうも条件によってタッチパネルが触ってもいない場所に 座標を拾ってしまうようです その理由はなんとなく察しが付くのですが アプリケーションからだとちょっとどうにもなりません 検討中の新しい認識エンジンではこういった問題への 対処も織り込もうと考えております -- (K) 2010-08-29 12 02 59 IS01にインストールしてみたんですが「黒い入力画面」が出ませんでした。 -- (TERU) 2010-10-10 17 23 29 すみません,しばらく見られませんでした. IS01は触ったことがないのですが,横向き画面の機種ですね? 残念ながらカタカナIMEは横画面に対応しておりません. 画面下に十分なスペースがないけれど 画面の右なり左なりに入力領域を寄せて出すのが妥当なのかに 疑問があるのが主な理由です(そもそもそれができるのかも不明) やるとしたら縦画面とは大分ちがったやり方になるかと思います -- (K) 2010-11-10 00 07 25 どこでダウンロード可能ですか? -- (kiyomi) 2011-04-24 01 01 16 ダウンロード出来ました☆ マッシュルーム対応んになることを期待しています! -- (kiyomi) 2011-04-24 01 36 01 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/gtavi_gta6/pages/117.html
編集できません -- (名無しさん) 2013-07-14 06 07 36 アプリ -- (Food) 2013-07-14 06 07 56 iPhone版はやく -- (名無しさん) 2013-08-23 09 22 25 iPhone版が欲しいです! -- (名無しさん) 2013-09-26 22 05 49 申し訳御座いません。 iOS版は、開発環境がないため開発できません。。 -- (Tag-STAFF) 2013-10-01 23 23 03 IOS版がほしい -- (名無しさん) 2013-10-24 22 09 37 チョップ・ザ・ドッグにてバクを発見。 エサと飲み物をあげた時、チョップが皿に口を入れた瞬間にゲージが増える。食べ(飲み)終わる前に皿を移動させると、消えないので繰り返せば20点のエサや飲み物でもゲージを満タンに出来る。 -- (かきふらい) 2013-11-11 11 45 10 playストアに申請ってかけてますか? -- (名無しさん) 2013-12-06 21 58 59 (名無しさん) 2013-12-06 21 58 59 はい。次回のアップデート配信までにはPlayストアに公開する予定です。 -- (Tag-STAFF) 2013-12-06 22 24 40 Play storeがnot foundになっていますが大丈夫でしょうか。 -- (yuyu) 2013-12-19 20 11 02 (yuyu) 2013-12-19 20 11 02 現在調整中です。上部のDownloadボタンからダウンロード可能です。 -- (Tag-STAFF) 2013-12-19 20 52 39 iphoneにも出してください -- (翔) 2014-02-25 19 36 09 設定ではモバイル表示をオフにしているのにモバイル表示になったりブラウザ表示になったりするのは解決できますか? -- (名無しさん) 2014-03-01 20 58 05 (名無しさん) 2014-03-01 20 58 05 @wiki側のバグです。 しばらくしても直らない場合はお手数ですがもう一度ご連絡下さい。 -- (Tag-STAFF) 2014-03-01 21 45 58 写真掲示板に写真を貼る手段が欲しいです -- (SB) 2014-05-10 07 53 30 (SB) 2014-05-10 07 53 30 PCと同じ方法でできないでしょうか? また、アプリについてのご意見等は設定から直接メールでご連絡頂ければスムーズに対応できるかと思いますのでよろしくお願いします。 -- (Tag-STAFF) 2014-05-10 18 24 27 あの -- (名無しさん) 2014-06-15 17 00 41 こんばんは。。 GTA4ように -- (1014号) 2014-07-31 14 43 44 アプリがダウンロードできないです。 ダウンロードのリンクを押してブラウザ開くとそこから進みません。ステータスバーに「ダウンロード完了」が出ません。 -- (Grove.Stの兵隊) 2014-08-04 22 59 19 (Grove.Stの兵隊) 2014-08-04 22 59 19 ご報告有難うございます。サーバーの不具合を修正しました。 お手数ですが、再度ダウンロードをお願いします。 -- (Tag-STAFF) 2014-08-04 23 49 43 ありがとうございます。ダウンロード出来ました。 -- (Grove.Stの兵隊) 2014-08-05 17 57 25 質問なのですがiOS版は有りますか? -- (アン) 2014-08-15 04 56 23 (アン) 2014-08-15 04 56 23 申し訳ありません。iOSに対応する予定はありません。 Safari等、ブラウザから閲覧下さい。 -- (Tag-STAFF) 2014-08-15 09 44 15 ブラウザ閲覧時の様に、ホームボタンを押してもう一度ブラウザを開いても閲覧してたページが表示されるような仕様は今後追加するのでしょうか?ホームに戻るとアプリを開いた最初の画面に戻って不便さがあります。 -- (名無しさん) 2014-12-07 16 51 26 フレンドお願いします -- (yokootadashi) 2015-01-25 06 58 48 自分ASUSのmemoパッド7を使用しているのですが、上のダウンロードのとこからダウンロードするとき違うアプリに飛ぶのですがどうしたらいいですか。(Mなし -- (名無しさん) 2015-02-26 18 21 29 上に追加です。シムカードはありません -- (名無しさん) 2015-02-26 18 22 41 違うアプリとはどの様に違うのでしょうか? こちらで確認しましたが問題ありませんでした。 -- (Tag-STAFF) 2015-02-26 20 35 03 違うアプリとは、ダウンロードボタンを押した時設定のアプリに飛んでしまいます。 -- (名無しさん) 2015-03-01 21 32 09 横槍かもしれませんが提供元不明のアプリを許可するのチェックボックスにチェックを付けていないのではないでしょうか? -- (SB) 2015-03-24 16 50 26 アプリからファイル(写真)のアップロードができませんが対応していないのですか? -- (SB) 2015-03-24 16 51 54 (SB) 2015-03-24 16 51 54 申し訳ありません。 現在、対応しておりませんのでメニューの「ブラウザ」から移動してアップロードをお願いします。 -- (Tag-STAFF) 2015-03-26 00 56 03 あれ、No addが無い・・・ -- (SB) 2015-05-09 23 08 30 今NoAdd版が使えないのですがAdBlock plusを入れたら一応広告は消えました -- (SB) 2015-06-14 19 17 13 ios版の対応予定ってないですかね? -- (名無しさん) 2015-06-29 17 31 00 iPhone版も制作してくれればありがたいですm(_ _)m -- (名無しさん) 2015-07-27 08 56 56 最新のメニューリストに更新してくれ -- (名無しさん) 2016-02-10 21 07 10 (名無しさん) 2016-02-10 21 07 10 バージョン3.11.15で最新のメニューリストに対応しました。 -- (Tag-STAFF) 2016-02-14 13 41 39 こ れ は す ご い ! ! -- (名無しさん) 2016-04-26 22 12 36 公式アプリってのがrockstarのやつとややこしいです -- (名無しさん) 2016-07-26 21 15 12 iphone版熱望 -- (名無しさん) 2017-01-08 21 38 02 んん -- (こうすけ) 2017-01-10 19 36 44 Σ(゚Д゚)スゲェ!! -- (名無しさん) 2017-02-18 11 05 19 iphone版は出ないの? -- (名無しさん) 2017-03-13 00 16 24 iFruitのAndro版出してくれよ -- (名無しさん) 2018-03-22 11 28 31 最高スゲー -- (名無しさん) 2018-07-05 11 21 57 Tag-あぼーん Wikiの公式を自称しているが、実際にはソースのリンクがなく編集もできない しかも、自分で「当アプリは、不正なソフトウェアではありません。 」って…この記事って荒らしか? ひどい記事 -- (名無しさん) 2020-07-13 07 49 53 最終更新日が2016/10/19だからお察しよ -- (名無しさん) 2020-12-17 21 34 54 APKインストールか…オープンソースソフトウェアならまだしも、これだと本当に公式アプリだろうがマルウェア関連のように見えてしまうのだが -- (名無しさん) 2022-04-20 18 53 03
https://w.atwiki.jp/sampleisbest/pages/165.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 PrnAddr アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット マルチバイト 注意 元のファイルが失われる恐れがあるので、必要なファイルは必ずバックアップを取ってください。 PrnAddr.cpp // マルチバイト #include Windows.h #include CommCtrl.h #include tchar.h #include sqlext.h #include stdio.h #include "resource.h" #define WIDTH(rect) ((rect).right - (rect).left) #define HEIGHT(rect) ((rect).bottom - (rect).top) #define LTRB(rect) (rect).left, (rect).top, (rect).right, (rect).bottom #define DRIVER _T("Microsoft Text Driver (*.txt; *.csv)") #define APPNAME _T("PrnAddr") // 関数プロトタイプ宣言 BOOL SplitPath(LPCTSTR pszPath); void Trace(LPCTSTR format, ...); void DigitOnly(LPTSTR pszStr); INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnInitDialog(HWND hDlg); void OnDropFiles(HWND hDlg, WPARAM wParam); BOOL OnClose(HWND hDlg); BOOL CheckRecMod(HWND hWnd); void OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam); void OnUpdate(void); void OnDrawItem(WPARAM wParam, LPARAM lParam); void OnDraw(HDC hdc, int nRec, BOOL bGuide); void DrawField(HDC hdc, PRECT prc, int nRow, int nCol, BOOL bGuide, LPCTSTR pszSuffix); void OnPrint(HWND hDlg, int nMode); void CopyRecord(void); void ShowSubDlg(void); int lmpx(int lm); int lmpy(int lm); int lmpw(int lm); int lmph(int lm); INT_PTR CALLBACK SubDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnCheck(HWND hDlg); void OnSave(HWND hDlg); void OnSubPrint(HWND hDlg); void OnSubInitDialog(HWND hDlg); void InitAddress(HWND hWnd); void LoadTable(HWND hWnd); BOOL SaveTable(HWND hWnd); BOOL CreateCsvFile(HWND hWnd, LPCTSTR pszPath); // 外部変数構造体 static struct { HINSTANCE hInstance; HWND hMainDlg;// メインダイアログ HWND hSubDlg;// 住所録ダイアログ HWND hRec;// レコードエディットハンドル HWND hSpin;// スピンコントロールハンドル HWND hUpdate;// 更新ボタンハンドル HWND hList;// リストビューハンドル HGLOBAL hDevMode;// デバイスモード構造体ハンドル HGLOBAL hDevNames;// デバイス名構造体ハンドル SQLHENV henv;// 環境ハンドル TCHAR szDbq[MAX_PATH];// データベースディレクトリ TCHAR szTable[MAX_PATH];// CSVファイル int nRecNum;// レコード数 int nRec;// 対象レコード BOOL bRecMod;// レコード変更フラグ BOOL bTableMod;// テーブル変更フラグ // デバイス能力 int nHorzRes; int nVertRes; int nPhysicalWidth; int nPhysicalHeight; int nPhysicalOffsetX; int nPhysicalOffsetY; int nLogPixelsX; int nLogPixelsY; } g; //============================================================================== int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { g.hInstance = hInstance; // ODBC環境ハンドルの確保 SQLRETURN rc;// retcode rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, g.henv); rc = SQLSetEnvAttr(g.henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); // コマンド引数の取得 LPWSTR pszCmdLine = GetCommandLineW(); int argc; LPWSTR *argv = CommandLineToArgvW(pszCmdLine, argc); if (2 = argc) { TCHAR szPath[MAX_PATH]; wcstombs_s(NULL, szPath, argv[1], _TRUNCATE); SplitPath(szPath); } LocalFree(argv); DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, MainDlgProc); HGLOBAL hr; hr = GlobalFree(g.hDevMode); hr = GlobalFree(g.hDevNames); rc = SQLFreeHandle(SQL_HANDLE_ENV, g.henv); return 0; } //------------------------------------------------------------------------------ BOOL SplitPath(LPCTSTR pszPath) { TCHAR szDrive[_MAX_DRIVE]; TCHAR szDir[_MAX_DIR]; TCHAR szFName[_MAX_FNAME]; TCHAR szExt[_MAX_EXT]; _splitpath_s(pszPath, szDrive, szDir, szFName, szExt); _makepath_s(g.szDbq, szDrive, szDir, NULL, NULL); _makepath_s(g.szTable, NULL, NULL, szFName, szExt); return TRUE; } //------------------------------------------------------------------------------ void Trace(LPCTSTR format, ...) { va_list arg_ptr; TCHAR buffer[256]; int size; va_start(arg_ptr, format); size = _vsntprintf_s(buffer, _TRUNCATE, format, arg_ptr); va_end(arg_ptr); OutputDebugString(buffer); if (size 0) { OutputDebugString(_T("...\n")); } } //------------------------------------------------------------------------------ void DigitOnly(LPTSTR pszStr) { LPTSTR psz; TCHAR c; for (psz = pszStr; c = *pszStr; pszStr++) { if (_istdigit(c)) { *psz++ = c; } } *psz = c; } //============================================================================== INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTR nRet = TRUE;// メッセージを処理した switch (uMsg) { case WM_COMMAND OnCommand(hDlg, wParam, lParam); break; case WM_DRAWITEM OnDrawItem(wParam, lParam); break; case WM_DROPFILES OnDropFiles(hDlg, wParam); DragFinish((HDROP)wParam); break; case WM_INITDIALOG OnInitDialog(hDlg); nRet = TRUE;// SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE if (OnClose(hDlg)) { EndDialog(hDlg, 0); } break; default nRet = FALSE;// メッセージを処理しなかった } return nRet; } //------------------------------------------------------------------------------ void OnInitDialog(HWND hDlg) { g.hMainDlg = hDlg; g.hRec= GetDlgItem(hDlg, IDC_RECORD); g.hSpin= GetDlgItem(hDlg, IDC_SPIN); g.hUpdate= GetDlgItem(hDlg, IDC_UPDATE); SendMessage(g.hSpin, UDM_SETBUDDY, (WPARAM)g.hRec, 0); g.hSubDlg = CreateDialog(g.hInstance, MAKEINTRESOURCE(IDD_SUB), hDlg, SubDlgProc); } //------------------------------------------------------------------------------ void OnDropFiles(HWND hDlg, WPARAM wParam) { HDROP hDrop = (HDROP)wParam; TCHAR szPath[MAX_PATH]; UINT ur = DragQueryFile(hDrop, 0, szPath, _countof(szPath)); SplitPath(szPath); ListView_DeleteAllItems(g.hList); InitAddress(hDlg); InvalidateRect(GetDlgItem(hDlg, IDC_PREVIEW), NULL, FALSE); } //------------------------------------------------------------------------------ BOOL OnClose(HWND hDlg) { BOOL bRet = TRUE; // レコード変更の確認 if (CheckRecMod(hDlg) == FALSE) return FALSE; // テーブル変更の確認 if (g.bTableMod == FALSE) return TRUE; int nr = MessageBox(hDlg, _T("住所録の内容は変更されています。\n\n保存しますか?"), APPNAME, MB_YESNOCANCEL | MB_ICONWARNING); switch (nr) { case IDYES bRet = SaveTable(hDlg); break; case IDNO break; default bRet = FALSE; } return bRet; } //------------------------------------------------------------------------------ BOOL CheckRecMod(HWND hWnd) { if (g.bRecMod == FALSE) return TRUE; int nr = MessageBox(hWnd, _T("レコードの内容は変更されています。\n\n更新しますか?"), APPNAME, MB_YESNOCANCEL | MB_ICONWARNING); switch (nr) { case IDYES OnUpdate(); break; case IDNO break; default return FALSE; } return TRUE; } //------------------------------------------------------------------------------ void OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam) { WORD wNotifyCode = HIWORD(wParam); WORD wID = LOWORD(wParam); HWND hwndCtl = (HWND)lParam; switch (wID) { case IDC_ADDRESS // 住所録 ShowSubDlg(); break; case IDC_PRINT // 単票印刷 if (CheckRecMod(hDlg)) { OnPrint(hDlg, 0); } break; case IDC_UPDATE // 更新 OnUpdate(); break; case IDCANCEL // 終了 SendMessage(hDlg, WM_CLOSE, 0, 0); break; } if (wNotifyCode == EN_CHANGE) { if (hwndCtl == g.hRec) { int nRec = max(SendMessage(g.hSpin, UDM_GETPOS, 0, 0) - 1, 0); if (nRec == g.nRec) return; if (CheckRecMod(hDlg)) { g.nRec = nRec; CopyRecord(); InvalidateRect(GetDlgItem(hDlg, IDC_PREVIEW), NULL, FALSE); } else { SendMessage(g.hSpin, UDM_SETPOS, 0, g.nRec + 1); } } else { if (g.bRecMod == FALSE) { g.bRecMod = TRUE; EnableWindow(g.hUpdate, g.bRecMod); } } } } //------------------------------------------------------------------------------ void OnUpdate(void) { TCHAR szBuf[256]; if (g.nRecNum = g.nRec) return; for (int n = 0; n 6; n++) { GetDlgItemText(g.hMainDlg, IDC_FIELD0 + n, szBuf, _countof(szBuf)); ListView_SetItemText(g.hList, g.nRec, n, szBuf); } g.bTableMod = TRUE; g.bRecMod = FALSE; EnableWindow(g.hUpdate, g.bRecMod); InvalidateRect(GetDlgItem(g.hMainDlg, IDC_PREVIEW), NULL, FALSE); } //------------------------------------------------------------------------------ void OnDrawItem(WPARAM wParam, LPARAM lParam) { LPDRAWITEMSTRUCT pdi = (LPDRAWITEMSTRUCT)lParam; HDC hdc = pdi- hDC; // 背景塗り潰し RECT rc; GetClientRect(pdi- hwndItem, rc); FillRect(hdc, rc, GetSysColorBrush(COLOR_WINDOW)); Trace(_T("OnDrawItem(%u) %d, %d, %d, %d\n"), wParam, LTRB(rc)); // デバイス能力 g.nPhysicalWidth= WIDTH(rc); g.nPhysicalHeight= HEIGHT(rc); g.nPhysicalOffsetX= 0; g.nPhysicalOffsetY= 0; // 背景 SetRect( rc, lmpx(0), lmpy(0), lmpx(300), lmpy(570)); FillRect(hdc, rc, GetSysColorBrush(COLOR_BTNFACE)); SetRect( rc, lmpx(0), lmpy(1250), lmpx(1000), lmpy(1480)); FillRect(hdc, rc, GetSysColorBrush(COLOR_BTNFACE)); int nRec = SendMessage(g.hSpin, UDM_GETPOS, 0, 0); OnDraw(hdc, nRec - 1, TRUE); } //------------------------------------------------------------------------------ void OnDraw(HDC hdc, int nRec, BOOL bGuide) { TCHAR szBuf[256]; HFONT hFont[3]; RECT rc; SetBkMode(hdc, TRANSPARENT);// 背景透過モード Trace(_T("OnDraw(%d)\n"), nRec); // 補助線 HPEN hPen = CreatePen(PS_SOLID, 0, RGB(0xff,0x00,0x00)); HGDIOBJ hPenOld = SelectObject(hdc, hPen); // 郵便番号 LOGFONT lf; ZeroMemory( lf, sizeof lf); lf.lfCharSet= DEFAULT_CHARSET; lf.lfHeight= -lmph(60); _tcscpy_s(lf.lfFaceName, _T("MS ゴシック")); hFont[0] = CreateFontIndirect( lf); HGDIOBJ hFontOld = SelectObject(hdc, hFont[0]); SetRect( rc, lmpx(440), lmpy(120), lmpx(930), lmpy(200)); if (bGuide) { Rectangle(hdc, LTRB(rc)); } if (nRec g.nRecNum) { ListView_GetItemText(g.hList, nRec, 2, szBuf, _countof(szBuf)); DigitOnly(szBuf); // 440, 510, 580, 650, 720, 790, 860 for (size_t n = 0; n _tcslen(szBuf); n++) { rc.right = rc.left + lmpw(70); DrawText(hdc, szBuf + n, 1, rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER); rc.left = rc.right; } } // 住所 lf.lfEscapement= 2700; lf.lfOrientation= 2700; lf.lfHeight= -lmph(60); _tcscpy_s(lf.lfFaceName, _T("@MS 明朝")); hFont[1] = CreateFontIndirect( lf); SelectObject(hdc, hFont[1]); SetRect( rc, lmpx(850-70), lmpy(300), lmpx(850), lmpy(1230)); DrawField(hdc, rc, nRec, 3, bGuide, NULL); SetRect( rc, lmpx(780-70), lmpy(400), lmpx(780), lmpy(1230)); DrawField(hdc, rc, nRec, 4, bGuide, NULL); SetRect( rc, lmpx(710-70), lmpy(400), lmpx(710), lmpy(1230)); DrawField(hdc, rc, nRec, 5, bGuide, NULL); // 氏名・連名 lf.lfHeight= -lmph(90); hFont[2] = CreateFontIndirect( lf); SelectObject(hdc, hFont[2]); SetRect( rc, lmpx(520-100), lmpy(400), lmpx(520), lmpy(1230)); DrawField(hdc, rc, nRec, 0, bGuide, _T("様")); SetRect( rc, lmpx(420-100), lmpy(400), lmpx(420), lmpy(1230)); DrawField(hdc, rc, nRec, 1, bGuide, _T("様")); // 終了処理 SelectObject(hdc, hFontOld); for (int n = 0; n _countof(hFont); n++) { DeleteObject(hFont[n]); } SelectObject(hdc, hPenOld); DeleteObject(hPen); } //------------------------------------------------------------------------------ void DrawField(HDC hdc, PRECT prc, int nRow, int nCol, BOOL bGuide, LPCTSTR pszSuffix) { TCHAR szText[64]; if (bGuide) { Rectangle(hdc, LTRB(*prc)); } if (g.nRecNum = nRow) return; ListView_GetItemText(g.hList, nRow, nCol, szText, _countof(szText)); if (szText[0]) { if (pszSuffix) { _tcscat_s(szText, pszSuffix); } TextOut(hdc, prc- right, prc- top, szText, _tcslen(szText)); } } //------------------------------------------------------------------------------ void OnPrint(HWND hDlg, int nMode) { PRINTDLGEX pd; LPDEVMODE pdm; LPDEVNAMES pdn; HRESULT hr; BOOL br; HDC hdc = NULL; // 印刷ダイアログ ZeroMemory( pd, sizeof pd); pd.lStructSize= sizeof pd; pd.hwndOwner= hDlg; pd.hDevMode= g.hDevMode; pd.hDevNames= g.hDevNames; pd.Flags= PD_NOPAGENUMS; pd.nStartPage= START_PAGE_GENERAL; hr = PrintDlgEx( pd); if (FAILED(hr)) { goto Exit; } g.hDevMode = pd.hDevMode; g.hDevNames = pd.hDevNames; if (pd.dwResultAction != PD_RESULT_PRINT) { goto Exit; } // プリンタ準備 pdm = (LPDEVMODE)GlobalLock(g.hDevMode); pdn = (LPDEVNAMES)GlobalLock(g.hDevNames); pdm- dmOrientation = DMORIENT_PORTRAIT; hdc = CreateDC(NULL, (LPCTSTR)pdn + pdn- wDeviceOffset, NULL, pdm); br = GlobalUnlock(g.hDevNames); br = GlobalUnlock(g.hDevMode); // デバイス能力の取得 g.nHorzRes= GetDeviceCaps(hdc, HORZRES); g.nVertRes= GetDeviceCaps(hdc, VERTRES); g.nPhysicalWidth= GetDeviceCaps(hdc, PHYSICALWIDTH); g.nPhysicalHeight= GetDeviceCaps(hdc, PHYSICALHEIGHT); g.nPhysicalOffsetX= GetDeviceCaps(hdc, PHYSICALOFFSETX); g.nPhysicalOffsetY= GetDeviceCaps(hdc, PHYSICALOFFSETY); g.nLogPixelsX= GetDeviceCaps(hdc, LOGPIXELSX); g.nLogPixelsY= GetDeviceCaps(hdc, LOGPIXELSY); // 用紙サイズを確認 SIZE size; size.cx = g.nPhysicalWidth * 254 / g.nLogPixelsX; size.cy = g.nPhysicalHeight * 254 / g.nLogPixelsY; Trace(_T("OnPrint %d %d\n"), size.cx, size.cy); if (100 abs(size.cx - 1000) || 100 abs(size.cy - 1480)) { MessageBox(hDlg, _T("用紙サイズを確認してください。"), NULL, MB_OK); goto Exit; } // 印刷開始 DOCINFO di; ZeroMemory( di, sizeof di); di.cbSize= sizeof di; di.lpszDocName= APPNAME; int nr = StartDoc(hdc, di); switch (nMode) { case 0 // 単票 nr = StartPage(hdc); int nRec; nRec = SendMessage(g.hSpin, UDM_GETPOS, 0, 0); OnDraw(hdc, nRec - 1, TRUE); nr = EndPage(hdc); break; case 1 // 連続 for (int n = 0; n g.nRecNum; n++) { br = ListView_GetCheckState(g.hList, n); if (br) { nr = StartPage(hdc); OnDraw(hdc, n, TRUE); nr = EndPage(hdc); } } break; } // 印刷終了 nr = EndDoc(hdc); Exit if (hdc) { DeleteDC(hdc); } } //------------------------------------------------------------------------------ void CopyRecord(void) { TCHAR szBuf[256]; Trace(_T("CopyRecord %d %d\n"), g.nRec, g.nRecNum); if (g.nRecNum = g.nRec) return; for (int n = 0; n 6; n++) { ListView_GetItemText(g.hList, g.nRec, n, szBuf, _countof(szBuf)); SetDlgItemText(g.hMainDlg, IDC_FIELD0 + n, szBuf); } g.bRecMod = FALSE; EnableWindow(g.hUpdate, g.bRecMod); } //------------------------------------------------------------------------------ void ShowSubDlg(void) { ShowWindow(g.hSubDlg, IsWindowVisible(g.hSubDlg) ? SW_HIDE SW_SHOW); } //------------------------------------------------------------------------------ // 0.1mm単位をピクセルに変換 // LoMetric to Pixel X int lmpx(int lm) { return lmpw(lm) - g.nPhysicalOffsetX; } // LoMetric to Pixel Y int lmpy(int lm) { return lmph(lm) - g.nPhysicalOffsetY; } // LoMetric to Pixel Width int lmpw(int lm) { return lm * g.nPhysicalWidth / 1000; } // LoMetric to Pixel Height int lmph(int lm) { return lm * g.nPhysicalHeight / 1480; } //============================================================================== INT_PTR CALLBACK SubDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTR nRet = TRUE;// メッセージを処理した switch (uMsg) { case WM_COMMAND switch (LOWORD(wParam)) { case IDC_CHECK // 全てチェック/解除 OnCheck(hDlg); break; case IDC_SAVE // 保存 OnSave(hDlg); break; case IDC_PRINT // 連続印刷 OnSubPrint(hDlg); break; case IDCANCEL // 閉じる ShowSubDlg(); break; } break; case WM_INITDIALOG OnSubInitDialog(hDlg); nRet = TRUE;// SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE ShowSubDlg(); break; default nRet = FALSE;// メッセージを処理しなかった } return nRet; } //------------------------------------------------------------------------------ void OnCheck(HWND hDlg) { UINT ur = IsDlgButtonChecked(hDlg, IDC_CHECK); BOOL bCheck = (ur == BST_CHECKED); for (int n = 0; n g.nRecNum; n++) { ListView_SetCheckState(g.hList, n, bCheck); } } //------------------------------------------------------------------------------ void OnSave(HWND hDlg) { if (g.bTableMod == FALSE) return; int nr = MessageBox(hDlg, _T("住所録を保存しますか?"), APPNAME, MB_YESNO | MB_ICONQUESTION); if (nr == IDYES) { SaveTable(hDlg); } } //------------------------------------------------------------------------------ void OnSubPrint(HWND hDlg) { BOOL br = FALSE; for (int n = 0; n g.nRecNum; n++) { br = ListView_GetCheckState(g.hList, n); if (br) break; } if (br == FALSE) { MessageBox(hDlg, _T("印刷するレコードにチェックを付けてください。"), APPNAME, MB_OK); return; } OnPrint(hDlg, 1); } //------------------------------------------------------------------------------ void OnSubInitDialog(HWND hDlg) { RECT rc; GetClientRect(hDlg, rc); Trace(_T("OnInitDialog %d, %d, %d, %d\n"), LTRB(rc)); // リストビュー拡張スタイル g.hList = GetDlgItem(hDlg, IDC_LIST); DWORD dwExStyle = ListView_GetExtendedListViewStyle(g.hList); dwExStyle |= LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES; ListView_SetExtendedListViewStyle(g.hList, dwExStyle); InitAddress(hDlg); } //------------------------------------------------------------------------------ void InitAddress(HWND hWnd) { // テーブルの読み込み LoadTable(hWnd); g.nRecNum = ListView_GetItemCount(g.hList); g.nRec = 0; CopyRecord(); SendMessage(g.hSpin, UDM_SETRANGE32, 1, g.nRecNum); SendMessage(g.hSpin, UDM_SETPOS, 0, MAKELONG(1, 0)); } //------------------------------------------------------------------------------ void LoadTable(HWND hWnd) { TCHAR buf[256]; SQLHDBC hdbc;// 接続ハンドル SQLHSTMT hstmt;// 命令ハンドル SQLSMALLINT col; SQLSMALLINT n; SQLSMALLINT datatype; SQLLEN len; SQLRETURN rc;// retcode // データベースへの接続 _stprintf_s(buf, _T("driver={%s}; dbq=%s"), DRIVER, g.szDbq); rc = SQLAllocHandle(SQL_HANDLE_DBC, g.henv, hdbc); rc = SQLDriverConnect(hdbc, NULL, (SQLTCHAR *)buf, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT); if (!SQL_SUCCEEDED(rc)) { goto Exit; } // 検索 _stprintf_s(buf, _T("select * from %s"), g.szTable); rc = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, hstmt); rc = SQLExecDirect(hstmt, (SQLTCHAR *)buf, SQL_NTS); if (!SQL_SUCCEEDED(rc)) { goto Exit; } // 列情報 LV_COLUMN lvCol; lvCol.mask= LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvCol.fmt= LVCFMT_LEFT; lvCol.cx= 100; rc = SQLNumResultCols(hstmt, col); for (n = 0; n col; n++) { rc = SQLDescribeCol(hstmt, n+1, (SQLTCHAR *)buf, _countof(buf), NULL, datatype, NULL, NULL, NULL); lvCol.pszText= buf; lvCol.iSubItem= n; ListView_InsertColumn(g.hList, n, lvCol); // Text 12 SQL_VARCHAR Char // Byte -6 SQL_TINYINT } // 行情報 LV_ITEM lvItem; lvItem.mask= LVIF_TEXT; lvItem.iItem= 0; while (1) { rc = SQLFetch(hstmt); if (rc == SQL_NO_DATA) break; if (rc == SQL_ERROR) break; for (n = 0; n col; n++) { SQLGetData(hstmt, n+1, SQL_C_TCHAR, buf, _countof(buf), len); if (len == SQL_NULL_DATA) { buf[0] = _T( \0 ); } lvItem.pszText= buf; lvItem.iSubItem= n; if (n == 0) { ListView_InsertItem(g.hList, lvItem); } else { ListView_SetItem(g.hList, lvItem); } } lvItem.iItem++; } SQLFreeHandle(SQL_HANDLE_STMT, hstmt); Exit SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); } //------------------------------------------------------------------------------ BOOL SaveTable(HWND hWnd) { TCHAR szNew[MAX_PATH]; _stprintf_s(szNew, _T("%s%s_"), g.szDbq, g.szTable); if (CreateCsvFile(hWnd, szNew) == FALSE) { return FALSE; } // CSVファイルの削除とリネーム TCHAR szOld[MAX_PATH]; _stprintf_s(szOld, _T("%s%s"), g.szDbq, g.szTable); BOOL br; br = DeleteFile(szOld); br = MoveFile(szNew, szOld); if (br == FALSE) { MessageBox(hWnd, _T("CSVファイルのリネームに失敗しました。"), NULL, MB_OK); return FALSE; } g.bTableMod = FALSE; return TRUE; } //------------------------------------------------------------------------------ BOOL CreateCsvFile(HWND hWnd, LPCTSTR pszPath) { TCHAR szBuf[MAX_PATH]; int nColNum = 6; // ファイルのオープン FILE *pFile; errno_t er = _tfopen_s( pFile, pszPath, _T("wt")); if (er) { MessageBox(hWnd, _T("ファイルのオープンに失敗しました。"), NULL, MB_OK); return FALSE; } // ヘッダ行 _stprintf_s(szBuf, _T("%s%s"), g.szDbq, _T("schema.ini")); DWORD dw = GetPrivateProfileString(g.szTable, _T("ColNameHeader"), NULL, szBuf, _countof(szBuf), szBuf); if (_tcsicmp(szBuf, _T("true")) == 0) { LVCOLUMN lvcol; lvcol.mask= LVCF_TEXT; lvcol.pszText= szBuf; lvcol.cchTextMax= _countof(szBuf); for (int nCol = 0; ; ) { ListView_GetColumn(g.hList, nCol, lvcol); _ftprintf_s(pFile, _T("%s"), lvcol.pszText); if (nColNum = ++nCol) { break; } _ftprintf_s(pFile, _T(",")); } _ftprintf_s(pFile, _T("\n")); } // 書き込み int nRowNum = ListView_GetItemCount(g.hList); for (int nRow = 0; nRow nRowNum; nRow++) { for (int nCol = 0; ; ) { ListView_GetItemText(g.hList, nRow, nCol, szBuf, _countof(szBuf)); _ftprintf_s(pFile, _T("%s"), szBuf); if (nColNum = ++nCol) { break; } _ftprintf_s(pFile, _T(",")); } _ftprintf_s(pFile, _T("\n")); } fclose(pFile); return TRUE; } resource.h #define IDD_MAIN100 #define IDD_SUB101 #define IDC_STATIC-1 #define IDC_PREVIEW1000 #define IDC_ADDRESS1001 #define IDC_PRINT1002 #define IDC_RECORD1003 #define IDC_SPIN1004 #define IDC_UPDATE1005 #define IDC_FIELD01010 #define IDC_FIELD11011 #define IDC_FIELD21012 #define IDC_FIELD31013 #define IDC_FIELD41014 #define IDC_FIELD51015 #define IDC_LIST1100 #define IDC_CHECK1101 #define IDC_SAVE1102 PrnAddr.rc // resource script #include windows.h #include "resource.h" //------------------------------------------------------------------------------ IDD_MAIN DIALOGEX 100, 50, 400, 304 STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX EXSTYLE WS_EX_APPWINDOW | WS_EX_ACCEPTFILES CAPTION "PrnAddr" FONT 10, "MS ゴシック" BEGIN LTEXT"",IDC_PREVIEW,4,4,200,296,WS_BORDER | SS_OWNERDRAW LTEXT"氏名",IDC_STATIC,212,8,32,12 EDITTEXTIDC_FIELD0,248,8,144,12,ES_AUTOHSCROLL LTEXT"連名",IDC_STATIC,212,28,32,12 EDITTEXTIDC_FIELD1,248,28,144,12,ES_AUTOHSCROLL LTEXT"郵便番号",IDC_STATIC,212,48,32,12 EDITTEXTIDC_FIELD2,248,48,144,12,ES_AUTOHSCROLL LTEXT"住所1",IDC_STATIC,212,68,32,12 EDITTEXTIDC_FIELD3,248,68,144,12,ES_AUTOHSCROLL LTEXT"住所2",IDC_STATIC,212,88,32,12 EDITTEXTIDC_FIELD4,248,88,144,12,ES_AUTOHSCROLL LTEXT"住所3",IDC_STATIC,212,108,32,12 EDITTEXTIDC_FIELD5,248,108,144,12,ES_AUTOHSCROLL EDITTEXTIDC_RECORD,248,128,48,16 CONTROL"",IDC_SPIN,"msctls_updown32", UDS_ARROWKEYS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT, 280,128,32,16 PUSHBUTTON"更新( U)",IDC_UPDATE,336,128,56,24 PUSHBUTTON"住所録( A)",IDC_ADDRESS,212,276,56,24 PUSHBUTTON"単票印刷( P)",IDC_PRINT,276,276,56,24 PUSHBUTTON"終了( X)",IDCANCEL,340,276,56,24 END //------------------------------------------------------------------------------ IDD_SUB DIALOG 0, 350, 384, 200 STYLE WS_POPUPWINDOW CAPTION "住所録" FONT 9, "MS Pゴシック" BEGIN CONTROL"",IDC_LIST,"SysListView32", WS_BORDER | WS_TABSTOP | LVS_REPORT,8,8,368,160 CONTROL"全てチェック/解除( A)",IDC_CHECK,"button", BS_AUTOCHECKBOX | WS_TABSTOP,8,176,80,16 PUSHBUTTON"保存( S)",IDC_SAVE,216,176,48,16 PUSHBUTTON"連続印刷( P)",IDC_PRINT,272,176,48,16 PUSHBUTTON"閉じる( X)",IDCANCEL,328,176,48,16 END schema.ini [address.csv] ColNameHeader=True CharacterSet=932 Format=CSVDelimited Col1=氏名 Char Col2=連名 Char Col3=郵便番号 Char Width 8 Col4=住所1 Char Col5=住所2 Char Col6=住所3 Char address.csv 氏名,連名,郵便番号,住所1,住所2,住所3 国会 議事堂, 花子 ,100-0014,東京都千代田区,永田町一丁目七番一号, 東京 タワー,,105-0011,東京都港区,芝公園四丁目二―八,
https://w.atwiki.jp/android/pages/73.html
過去のニュース 2009年2月のニュース 2009年4月のニュース 2009/03/31 Barnes Noble、『BlackBerry』用電子書籍リーダーをリリース 『「以前明らかにしていた通り、われわれは eReader の Linux 版と Android 版の開発を進めている。これら重要なプラットフォーム対応版は、夏頃に提供する見通しだ」』 Huawei s enigmatic Android phone bound for T-Mobile in Q3? Vodafone HTC Magic Google phone out on 1 May G2がUKでVodafoneから5/1発売というウワサ Analysts Google Android Not a Netbook Threat to Windows 7 2009/03/30 日本Androidの会 金沢支部 第一回勉強会 日本Androidの会 2009年4月のイベント 2009年4月の定例イベント開催のお知らせ 続・「ガラパゴスで何悪い」と言う前に、もう一度考え直してほしいこと。 Android 1.0 for c7x0 を公開します Android MarketをPCから見る方法 Skype、Apple iPhone向けIP電話アプリ発表か 話題の「セカイカメラ」が実用化へ 『「実はiPhone版よりも開発が進んでいる」(井口社長)』 2009/03/29 第2回Androidハンズオンセミナーin大阪レポート 2009/03/28 スマートフォン向けオープン・ソース・フレームワーク Palm Pre Coming April 30th Port Your Number To Google Voice! BSDroid FCC Grants Approval To An Android Phone With T-Mobile 3G T-Mobile HTC Magic/G2 Passes FCC! G2がFCC試験通過。 Nokia pulling all OEM contracts? 2009/03/27 Open-source mobile framework supports Android NyARToolkit2.2.0対応バージョンforAndroid Archos AndroidベースMID今年7月に登場? Androidディバイスの訳にちょっとうけた。 ネット広告事業の拡大に向けブランディング用途開拓:ITpro HTC Magic To Denmark In May? 2009/03/26 Android Dev Phone 1ファームウェアアップデート 将来のカギを握るのは「アイテム課金」と「iPhone」……ゲーム業界人へのアンケートで Next Android Device (G2?) Gets Flash Support クロノス・クラウン、Android向けにゲームアプリ「EX Reversi」を提供開始 グーグルの音声検索、「BlackBerry」からも可能に Acer F1 coming in September, powered by Snapdragon? 「イノベーションを起こす条件が揃っているのはAndroidのみ」,グーグルが講演 Apple/Google、Netbook と次の大ブーム Flash coming to Android courtesy of BSQUARE G2でFlash採用? Hey Google Android Market Requests! Android In South Korea Q3? Shop Savvy Now With Local Store Inventory T-Mobile Makes Android App MyAccount 6 Orange Androids, HTC Hero Palringo For Android 2009/03/25 Googleケータイ,世に現る 第8回 Android最新トレンド2009・春 iPhoneが50%を占める、米国内スマートフォンのウェブトラフィック。Androidも5%で順調な伸び Welcome! Android on HTC Lenovo KIRFs again with the oPhone UI 2009/03/24 Acer A1 Coming In September? 中国メーカー製のAndroid端末がいよいよ登場 - デュアルSIM対応の「DSTL1」 Androidをデジタル家電にも--半導体ベンダーなど国内23社が推進団体を設立 「Android」を組み込み機器で利用、共同開発などを行う団体が設立 PHOTOVIEW Vodafone HTC Magic Google Android Smartphone Androidのコンパイル環境を整える方法 AndroidでJNIを使う方法 Acer A1 touchscreen Android phone to arrive in September? Dell Droid Gets Rejected Android Developer Challenge 2 Google Ventures and Rich Miner Dellの「iPhoneキラー」スマートフォン、動作が重すぎて不採用に アイエニウェア、企業メールアドレスを携帯端末で活用、送受信するソフト 2009/03/23 Open Embedded Software Foundation(OESF)設立 Android Hackathon 3/20が行われました。 じゃらんWebサービスを使ってみる1 2009/03/22 2009/3/19、20 Android Hackathon レポート Android Hackathon に参加してきた Samsung Omnia Going Android? Android Hackathon Google Chrome、ハッキングコンテストで唯一の生き残りブラウザに スマートフォン勉強会@関西#2のスライド 世界最小のAndroidマシンgumstix 期待されるAndroidケータイ 2009/03/21 ARアプリ 銀行に採用される(Android) Android携帯電話一覧 OHA参加のデバイスメーカーのAndroid端末発売状況 セカイカメラ for Android の動画を公開しました。 オバケカメラとオシャレカメラ 2009/03/20 Android Hachathon 3/20に行ってきました! Android Hackathonに参加してきました 3/19 Android Hackathon開催しました。 Android hack-a-thon 2009/03/18 HTC、Googleの「Android」を採用した携帯電話を年内に4機種以上発売へ 2009/03/17 ケータイJava(CLDC)上で動くDalvik VMをオープンソースで公開!
https://w.atwiki.jp/android_api/pages/15.html
Android簡単API一覧 [[android]] [[android.app]] [[アプリケーション]] android.content 公開情報へのアクセス android.database データベースへのアクセス android.graphics グラフィックス android.hardware ハードウェア制御 android.location 位置情報 android.media メディアプレイヤー android.net 通信 android.opengl OpenGL android.os Os システムサービス android.preference プリファレンス android.provider コンテントプロバイダ android.sax SAX android.telephony 通話 android.test テスト android.text テキスト android.util ユーティリティ android.view ビュー android.webkit HTML レンタリング android.widget ウィジェット
https://w.atwiki.jp/mikumikuwallpaper/pages/22.html
(分類名) 日付 機種 Android OS Ver 備考 ボーン数 2014/05/02 Nexus 7(2013) Android 4.4 219個 Nexus 10(2013) Android 4.4 987個 Xperia UL(SOL22) Android 4.2.2 219個 2014/05/08 Xperia Z(SO-02E) Android 4.2.2 219個 Galaxy S3(SC-06D) Android 4.3(CM10※) シマシマ問題 214個 2014/05/09 Xperia A(SO-04E) Android 4.2.2 214個 AQUOS PHONE sv(SH-10D) Android 4.1.2 シマシマ問題 214個 isai(LGL22) Android4.2 219個 Xperia Z1(SOL23) Android 4.22 219個 2014/5/12 Xperia acro HD(IS12S) Android4.0.4 214個 ELUGA X(P02E) Android 4.1.2 214個 2014/05/13 ARROWS NX(F-01F) Android 4.2.2 219個 ※AndroidカスタムOS コメント 内容の訂正など、情報の提供にご利用下さい。 名前 コメント
https://w.atwiki.jp/androidmemo/pages/4.html
開発環境の構築 Windowos7 + Eclipse Indigo SR1 インストール AndroidSDK および AndroidNDK の環境が整っている前提 この辺りを参考 SDK この辺りを参考 NDK プロジェクトファイル作成 新規⇒Androidプロジェクト NDK対応 新規作成したプロジェクトを右クリック⇒Androidツール⇒Add Native Support を選択 STLを使う プロジェクト⇒プロパティのC/C++ 一般⇒パスおよびシンボル のインクルードにNDKのSTLフォルダ C \Android\android-ndk-r8d\sources\cxx-stl\stlport\stlport を追加
https://w.atwiki.jp/rupt/pages/119.html
STXTVIEW_S ../ ソフトウェア名 STXTVIEW_S 現Version - 作者(敬称略) 552=143? 配布元 2ch関連保管室 ソフトウェア形態 ? ソース 公開/ASM 紹介 RUPUTERにつて語ろうスレの552(=143?)氏によるSimpleTextViewerの第二改造版。 改造版STXTVIEWに検索機能が追加されたバージョン。 検索機能を利用するには、閲覧中にENTERキーを押す。 すると下のような画面になる。 あとは検索の方向を指定し、検索語を入力するとよい。 検索語に漢字を使うことも可能だ。 (使用文書情報) 日本語:萩原朔太郎 『猫町』 英語:Eric S. Raymond Homesteading the Noosphere (スクリーンショット情報) 全:RuputerPRO + 画面キャプチャ(rupcaptu) ver1.00
https://w.atwiki.jp/bovecrach/pages/52.html
執筆中 目次 「android baselineAligned」がなぜ lint の警告対象なのか。解説されているブログ なぜ警告対象になるんだろう。 LinearLayoutのソースから baselineAligned の動きを読み解く。LinearLayout.measureHorizontal(int, int) LinearLayout.layoutHorizontal() MyLinearLayoutを作って確認してみることにする。 まとめ 「android baselineAligned」がなぜ lint の警告対象なのか。 解説されているブログ 元々、ADT-16にしたときから警告が出ていたので気になっていた。 探してみたら既に記事があったので、まずは掲載。 Androidアプリ開発 http //android49.blog.fc2.com/ Androidアプリ開発 「android baselineAligned」とは なぜ警告対象になるんだろう。 「なるほどなぁ~」と解説を読んだのだが、ふと、どのくらいの警告レベルなんだろうと思った。 merge タグは明らかにViewGroupが減っているので顕著なんだが、 設定を1つ false にする程度で、どうして警告が出るんだろうか。 そこんとこがちょっと引っかかったので調べてみる。 LinearLayoutのソースから baselineAligned の動きを読み解く。 まずは android.widget.LinearLayout を眺めてみることにする。 記憶されるフィールド名は mBaselineAligned で、 代入以外の使用箇所は以下の2メソッド android.widget.LinearLayout.measureHorizontal(int, int) android.widget.LinearLayout.layoutHorizontal() それぞれが何をしているのか。 LinearLayout.measureHorizontal(int, int) この処理が長そうだ。 child.measure(freeSpec, freeSpec); この中で呼んでいる onMeasure(widthMeasureSpec, heightMeasureSpec); は、android.widgetにあるほぼ全てのViewを継承したクラスがOverrideしている。 例としてImageViewでは、646~749行目までの約100行が使われている。 Drawableの有無や幅・高さはもちろん、 パディングやアスペクトも考慮された計算がずらずらと・・・。 特にViewGroupの処理は顕著で、 子Viewを全て計算すると子Viewから想定される“ちょうどいい”感じを 頑張って導き出している。 呼び出される回数によっては危なそうだ。 LinearLayout.layoutHorizontal() こちらは以下のメソッドがルートになっている。 android.widget.LinearLayout.onLayout(boolean, int, int, int, int) measureHorizontal()と同じように色々と計算があるものの、 子Viewに対する重めの呼び出しがないようなので、 すごく遅くなるイメージではない。 MyLinearLayoutを作って確認してみることにする。 public class MyLinearLayout extends LinearLayout { public MyLinearLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { long start = System.currentTimeMillis(); super.onMeasure(widthMeasureSpec, heightMeasureSpec); L.d("process time = %d", System.currentTimeMillis() - start); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { long start = System.currentTimeMillis(); super.onLayout(changed, l, t, r, b); L.d("process time = %d", System.currentTimeMillis() - start); }} 画面はこんなの。 ListFragmentが2つでタブに登録されていて、ボタンがいくつか。 メニューも2項目ある。 ルートのViewGroupとして指定して回数/時間を確認してみると、 まとめ 名前
https://w.atwiki.jp/pazdra/pages/577.html
パズドラ動作環境に適合する機種(Android) 【情報が古いため削除しました】